package practice1;

public class Queue {
	
	private Node head ;

	

	public Queue(Node node) {
		super();
		this.head = node;
	}
	
	/**
	 * 查询
	 */
	public void printNodes(){
		//设置当前节点
		Node current = head;
		//因为String方法是final类型的使用String会浪费资源 所以使用StringBuffer的方法
		StringBuffer sb = new StringBuffer("head");
		while(true){
			//如果当前节点的下一个节点是空的话 说明这已经是最后一个节点了  
			if(current.getNext() == null){
				break;
			}
			current = current.getNext();
			//使用append方法 把节点数据添加进去
			sb.append("-->"+current.getDate());
		}
		//使用toString的方法把这些数据打印出来
		System.out.println(sb.toString());
	}
	
	/**
	 * 添加数据
	 * @param addNode Node对象
	 */
	public void add(Node addNode){
		
		//当前节点
		Node current = head;
		
		while(true){
			//如果当前节点的下一个节点为空 说明可以添加
			if(current.getNext() == null){
				current.setNext(addNode);
				break;
			}
			//把当前节点设置为当前节点的下一个节点
			current = current.getNext();
		}
		
	}
	/**
	 * 删除：只能删除头节点的下一个节点
	 */
	public void delete(){
		//当前节点
		Node current = head;
		//如果当前节点的下一个节点是空的话 说明只有一个头节点 直接结束方法
		if(current.getNext()==null){
			return;
		}
		//把当前节点设置为下一个节点的下一个节点 就删除一个节点 
		current.setNext(current.getNext().getNext());
	}
	
	/**
	 * 修改
	 */
	public void update(Node before,int after){
		//当前节点
		Node current = head;
		
		while(true){
			
			//如果当前节点和要修改的节点的数据相同 说明找到了
			if(current.getDate() == before.getDate()){
				//找到了 就把要修改的数据after传进来 然后跳出循环
				current.setDate(after);
				break;
			}
			//如果当前节点的下一个节点为空 说明这已经是最后一个节点了 没找到你要修改的数据
			if(current.getNext() == null){
				System.out.println("没找到要修改的数据");
				break;
			}
			//把当前节点设置为当前节点的下一个节点
			current = current.getNext();
			
		}
	}

}
